﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Net.Mail;

namespace PHI2
{
    public partial class GestionLab : Form
    {
        private int contador1 = 0;
        private int contador2 = 0;
        private bool SelVariedad = false;
        private bool SelEnsayo = false;
        private PHIEntities2 phi = new PHIEntities2();
        private ConsultasBD consultas;
        private bool NoEsNumero;
        private bool EsUpdate = false;
        private ManejoEXCEL excel;
        private ManejoMOVIL movil;
        

        public GestionLab()
        {

            InitializeComponent();
            PHIEntities2 phi = new PHIEntities2();
            consultas = new ConsultasBD(phi);
            excel = new ManejoEXCEL(consultas);
            movil = new ManejoMOVIL(consultas);
            
     
            ligarADatos();            
        }

        /// <summary>
        /// Responde al Botón de Consulta de mediciones. Muestra la lista de mediciones que responde a los filtros ingresados por el usuario.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonMedicion_Click(object sender, EventArgs e)
        {
                string variedad = comboBoxVariedad.SelectedValue == null ? null : comboBoxVariedad.SelectedValue.ToString();
                string ensayo = comboBoxEnsayo.SelectedValue == null ? null : comboBoxEnsayo.SelectedValue.ToString();
                string repeticion = comboBoxRepeticion.SelectedValue == null ? null : comboBoxRepeticion.SelectedValue.ToString();

                List<Object> med = consultas.ExecuteQueryDataJoins(variedad, ensayo, repeticion);

                dataGridViewResultadosConsulta.DataSource = med.ToList();
                dataGridViewResultadosConsulta.Visible = true;
                  
              
                comboBoxVariedad.SelectedItem = null;
                comboBoxEnsayo.SelectedItem = null;
                comboBoxRepeticion.SelectedItem = null;  
        }

        /// <summary>
        /// Método que muestra la parcela en donde se encuentra  la variedad ingresada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonParcela_Click(object sender, EventArgs e)
        {
            
            string variedad = comboBoxVariedad.SelectedValue == null ? null : comboBoxVariedad.SelectedValue.ToString();
            string repeticion = comboBoxRepeticion.SelectedValue == null ? null : comboBoxRepeticion.SelectedValue.ToString();

            if (String.IsNullOrEmpty(variedad))
            {
                MessageBox.Show("Ingrese la variedad a buscar");
            }
            else
            {
                List<Parcelas> resultado = consultas.ExecuteQueryLand(variedad, repeticion);
                string texto="";
                foreach (Parcelas a in resultado)
                {
                    texto += "Parcela: " + a.Parcela + "\n";
                }
                MessageBox.Show(texto);
            }

            comboBoxVariedad.SelectedItem = null;
            comboBoxEnsayo.SelectedItem = null;
            comboBoxRepeticion.SelectedItem = null;
        }

        /// <summary>
        /// Maneja el evento Click del botón Descargar Plantilla. Permite al usuario guardar una plantilla para ingreso masivo de mediciones.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            
                string path = "";
                FolderBrowserDialog selectorDirectorio = new FolderBrowserDialog();
                selectorDirectorio.Description = "Seleccione directorio de descarga de plantilla";
                if (selectorDirectorio.ShowDialog() == DialogResult.OK)
                {
                    path = selectorDirectorio.SelectedPath + @"\Plantilla_TRIGO.xls";
                    //Copio archivo
                    string origen = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
                    origen = origen.Substring(6);
                    origen = origen.Substring(0, origen.IndexOf(@"bin\Debug"));
                    origen += @"Documentos\PLANTILL_ DATOS_CANDEAL.xls";
                    origen.Replace(@"\", @"\\");

                    System.IO.File.Copy(origen, path, true);
                }

                
            
           
            
        }

        /// <summary>
        /// Maneja el evento keyDown en TextBox para permitir solo valóres numéricos.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBoxMedicion_KeyDown(object sender, KeyEventArgs e)
        {
            
            NoEsNumero = false;


            if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
            {
                

                if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
                {

                    if (e.KeyCode != Keys.Back && e.KeyCode!=Keys.Enter && e.KeyCode!=Keys.OemPeriod && e.KeyCode!=Keys.Oemcomma)
                    {
                        NoEsNumero = true;
                    }
                }
            }

            if (Control.ModifierKeys == Keys.Shift)
            {
                NoEsNumero = true;
            }
        
         }

        /// <summary>
        /// Maneja el evento keyDOwn en TextBox para permitir solo valóres numéricos enteros.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBoxMedicionEntero_KeyDown(object sender, KeyEventArgs e)
        {

            NoEsNumero = false;


            if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
            {


                if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
                {

                    if (e.KeyCode != Keys.Back && e.KeyCode != Keys.Enter)
                    {
                        NoEsNumero = true;
                    }
                }
            }

            if (Control.ModifierKeys == Keys.Shift)
            {
                NoEsNumero = true;
            }

        }

        /// <summary>
        /// Complementa método KeyDown para permitir sólo valores numéricos.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBoxMedicion_KeyPress(object sender, KeyPressEventArgs e)
        {
            TextBox text = (TextBox)sender;

            if (NoEsNumero == true)
            {    
                    labelMensajeErrorIngresoMediciones.Text = "* Favor ingresar sólo valores númericos";
                    labelMensajeErrorIngresoMediciones.Visible = true;
                    e.Handled = true;
            }
            else
            {
                if (e.KeyChar == (char)Keys.Enter)
                {
                    if (((TextBox)sender).Name == "textBoxBolsa")
                    {
                        textBoxFB.Focus();
                    }
                    else
                    {
                        SendKeys.Send("{TAB}");
                    }

                }   
                    labelMensajeErrorIngresoMediciones.Visible = false;
            }
        }

        /// <summary>
        /// Complementa método KeyDown para permitir sólo valores numéricos enteros.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void textBoxMedicionEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            TextBox text = (TextBox)sender;

            if (NoEsNumero == true)
            {

                labelMensajeErrorIngresoVariedades.Text = "* Favor ingresar sólo valores númericos enteros";
                labelMensajeErrorIngresoVariedades.Visible = true;

                e.Handled = true;
            }
            else
            {
                if (e.KeyChar == (char)Keys.Enter)
                {
                    SendKeys.Send("{TAB}");
                }

                labelMensajeErrorIngresoVariedades.Visible = false;

            }
        }

        /// <summary>
        /// Controla el ingreso de mediciones por interfaz.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonGuardarMediciones_Click(object sender, EventArgs e)
        {

            try
            {
                int idvariedad = Int32.Parse(comboBoxVariedades2.SelectedValue.ToString());
                int idensayo = Int32.Parse(comboBoxEnsayo2.SelectedValue.ToString());
                int repeticion = Int32.Parse(comboBoxRepeticion2.SelectedValue.ToString());

                if (!EsUpdate)
                {

                    try
                    {
                        consultas.AddMedicion(idvariedad, repeticion, idensayo, dateTimePickerSiembra.Value.Date,
                                  dateTimePickerEmergencia.Value.Date,dateTimePickerEspigadura.Value.Date,dateTimePickerFloracion.Value.Date,dateTimePickerMadurez.Value.Date,float.Parse(textBoxFS.Text),float.Parse(textBoxDS.Text),float.Parse(textBoxBolsa.Text),
                                  float.Parse(textBoxFB.Text),
                                  float.Parse(textBoxTG.Text), float.Parse(textBoxWG.Text), float.Parse(textBoxDG.Text), float.Parse(textBoxHA.Text),
                                  float.Parse(textBoxGLAUCO.Text), float.Parse(textBoxAP.Text), float.Parse(textBoxAT.Text), float.Parse(textBoxLE.Text),
                                  float.Parse(textBoxPM.Text), float.Parse(textBoxVI.Text), float.Parse(textBoxAH1.Text), float.Parse(textBoxLH1.Text),
                                  float.Parse(textBoxAH2.Text), float.Parse(textBoxLH2.Text), float.Parse(textBoxAH3.Text), float.Parse(textBoxLH3.Text),
                                  float.Parse(textBoxMJE.Text), float.Parse(textBoxCOBERTURA.Text));

                        MessageBox.Show("Datos Ingresados");
                        ligarADatos();
                        //EsUpdate = false; // Cuando se ocupa ligardato se actualizan los combox, y el update se vuelve true;
                        comboBoxVariedades2.SelectedItem = null;
                        comboBoxEnsayo2.SelectedItem = null;
                        comboBoxRepeticion2.SelectedItem = null;
                        Limpiar();
                    }
                    catch
                    {
                        MessageBox.Show("Ingrese datos en todas las casillas");
                    }
                }
                else
                {
                    try
                    {
                        consultas.UpdateMedicion(idvariedad, repeticion, idensayo, dateTimePickerSiembra.Value.Date,
                                  dateTimePickerEmergencia.Value.Date, dateTimePickerEspigadura.Value.Date, dateTimePickerFloracion.Value.Date, dateTimePickerMadurez.Value.Date, float.Parse(textBoxFS.Text), float.Parse(textBoxDS.Text), float.Parse(textBoxBolsa.Text), float.Parse(textBoxFB.Text),
                                      float.Parse(textBoxTG.Text), float.Parse(textBoxWG.Text), float.Parse(textBoxDG.Text), float.Parse(textBoxHA.Text),
                                      float.Parse(textBoxGLAUCO.Text), float.Parse(textBoxAP.Text), float.Parse(textBoxAT.Text), float.Parse(textBoxLE.Text),
                                      float.Parse(textBoxPM.Text), float.Parse(textBoxVI.Text), float.Parse(textBoxAH1.Text), float.Parse(textBoxLH1.Text),
                                      float.Parse(textBoxAH2.Text), float.Parse(textBoxLH2.Text), float.Parse(textBoxAH3.Text), float.Parse(textBoxLH3.Text),
                                      float.Parse(textBoxMJE.Text), float.Parse(textBoxCOBERTURA.Text));
                        //EsUpdate = false;
                        MessageBox.Show("Datos Actualizados");
                        ligarADatos();
                        comboBoxVariedades2.SelectedItem = null;
                        comboBoxEnsayo2.SelectedItem = null;
                        comboBoxRepeticion2.SelectedItem = null;
                        Limpiar();

                    }
                    catch
                    {
                        MessageBox.Show("Ingrese datos en todas las casillas");
                    }
                }
            }

            catch
            {
                MessageBox.Show("Ingrese datos en todas las casillas");
            }
        }

        /// <summary>
        /// Si la seleccion de la variedad completa el trío (variedad, ensayo, repeticion), el método ordena la carga de mediciones para editar.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBoxVariedades2_SelectedIndexChanged(object sender, EventArgs e)
        {
            llenarMediciones();      
        }

        /// <summary>
        /// Si la seleccion de ensayo completa el trío (variedad, ensayo, repeticion), el método ordena la carga de mediciones para editar.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBoxEnsayo2_SelectedIndexChanged(object sender, EventArgs e)
        {
            llenarMediciones();
        }

        /// <summary>
        /// Si la selección de repetición completa el trío (variedad, ensayo, repeticion), el método ordena la carga de mediciones para editar.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBoxRepeticion2_SelectedIndexChanged(object sender, EventArgs e)
        {
            llenarMediciones();
        }

        /// <summary>
        /// Carga las mediciones en caso de que existan
        /// </summary>
        private void llenarMediciones()
        {
            
            string variedad = comboBoxVariedades2.SelectedValue == null ? null : comboBoxVariedades2.SelectedValue.ToString();
            string ensayo = comboBoxEnsayo2.SelectedValue == null ? null : comboBoxEnsayo2.SelectedValue.ToString();
            string repeticion = comboBoxRepeticion2.SelectedValue == null ? null : comboBoxRepeticion2.SelectedValue.ToString();

            if (variedad != null & ensayo != null && repeticion != null)
            {
                List<Mediciones> mediciones = consultas.ExecuteQueryData(variedad, ensayo, repeticion);
                if (mediciones.Count != 0)
                {
                    EsUpdate = true;
                    ActualizarVistaMediciones(mediciones[0]);
                }
                else
                {
                    EsUpdate = false;
                    Limpiar();
                }
            } 
        }

        /// <summary>
        /// Carga en los textbox los datos de las mediciones
        /// </summary>
        /// <param name="mediciones">medicion a cargar</param>
        private void ActualizarVistaMediciones(Mediciones mediciones)
        {
            dateTimePickerSiembra.Value = mediciones.FechaSiembra.Value;
            dateTimePickerEmergencia.Value = mediciones.FechaEmergencia.Value;
            dateTimePickerEspigadura.Value = mediciones.FechaEspigadura.Value;
            dateTimePickerFloracion.Value = mediciones.FechaFloracion.Value;
            dateTimePickerMadurez.Value = mediciones.FechaMadurez.Value;
            textBoxFS.Text = mediciones.FS.ToString();
            textBoxDS.Text = mediciones.DS.ToString();
            textBoxBolsa.Text = mediciones.Bolsa.ToString();
            textBoxFB.Text = mediciones.FB.ToString();
            textBoxTG.Text = mediciones.TG.ToString();
            textBoxWG.Text = mediciones.WG.ToString();
            textBoxDG.Text = mediciones.DG.ToString();
            textBoxHA.Text = mediciones.HA.ToString();
            textBoxGLAUCO.Text = mediciones.GLAUCO.ToString();
            textBoxAP.Text = mediciones.AP.ToString();
            textBoxAT.Text = mediciones.AT.ToString();
            textBoxLE.Text = mediciones.LE.ToString();
            textBoxPM.Text = mediciones.PM.ToString();
            textBoxVI.Text = mediciones.VI.ToString();
            textBoxAH1.Text = mediciones.AH1.ToString();
            textBoxLH1.Text = mediciones.LH1.ToString();
            textBoxAH2.Text = mediciones.AH2.ToString();
            textBoxLH2.Text = mediciones.LH2.ToString();
            textBoxAH3.Text = mediciones.AH3.ToString();
            textBoxLH3.Text = mediciones.LH3.ToString();
            textBoxMJE.Text = mediciones.MJE.ToString();
            textBoxCOBERTURA.Text = mediciones.COBERTURA.ToString();
        }

        /// <summary>
        /// Método que limpia los textbox en la sección mediciones
        /// </summary>
        private void Limpiar()
        {
            dateTimePickerSiembra.Value = DateTime.Today;
            dateTimePickerEmergencia.Value = DateTime.Today;
            dateTimePickerEspigadura.Value = DateTime.Today;
            dateTimePickerFloracion.Value = DateTime.Today;
            dateTimePickerMadurez.Value = DateTime.Today;
            textBoxFS.Clear();
            textBoxDS.Clear();
            textBoxBolsa.Clear();
            textBoxFB.Clear(); textBoxTG.Clear(); textBoxWG.Clear(); textBoxDG.Clear(); textBoxHA.Clear(); textBoxGLAUCO.Clear(); textBoxAP.Clear();
            textBoxAT.Clear(); textBoxLE.Clear(); textBoxPM.Clear(); textBoxVI.Clear(); textBoxAH1.Clear(); textBoxLH1.Clear(); textBoxAH2.Clear();
            textBoxLH2.Clear(); textBoxAH3.Clear(); textBoxLH3.Clear(); textBoxMJE.Clear(); textBoxCOBERTURA.Clear(); 
        
        }

        /// <summary>
        /// Maneja el registro de  una nueva variedad en la base de datos. También ordena la actualizacion de parcela.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonAgregarVariedad_Click(object sender, EventArgs e)
        {
            string CodigoVariedad = String.IsNullOrEmpty(textBoxCodigoVariedad.Text)? null : textBoxCodigoVariedad.Text;
            string NombreVariedad = String.IsNullOrEmpty(textBoxNombreVariedad.Text) ? null : textBoxNombreVariedad.Text;
            string Descripcion = String.IsNullOrEmpty(textBoxDescripcionVariedad.Text) ? null : textBoxDescripcionVariedad.Text;
            string ParcelaRep1 = String.IsNullOrEmpty(textBoxParcelaR1.Text) ? null : textBoxParcelaR1.Text;
            string ParcelaRep2 = String.IsNullOrEmpty(textBoxParcelaR2.Text) ? null : textBoxParcelaR2.Text;

            if (CodigoVariedad != null && NombreVariedad != null && Descripcion != null && ParcelaRep1 != null && ParcelaRep2 != null)
            {
                consultas.AddVariedad(Int32.Parse(CodigoVariedad), NombreVariedad, Descripcion);
                
                consultas.AddParcela(Int32.Parse(CodigoVariedad), 1, Int32.Parse(ParcelaRep1));
                consultas.AddParcela(Int32.Parse(CodigoVariedad), 2, Int32.Parse(ParcelaRep2));

                MessageBox.Show("Nueva Variedad Ingresada");
                textBoxNombreVariedad.Text = "";
                textBoxDescripcionVariedad.Text = "";
                textBoxCodigoVariedad.Text = "";
                textBoxParcelaR1.Text = "";
                textBoxParcelaR2.Text = "";
                textBoxNombreVariedad.Text = "";

                ligarADatos();
            }
            else
            {
                MessageBox.Show("Favor Complete todos los campos");
            }
        }

        /// <summary>
        /// Actualiza las fuentes de datos de los controles enlazados
        /// </summary>
        private void ligarADatos()
        {
            try
            {
                // Se inicializa el ComboBox1
                var data1 = phi.Variedades;
                comboBoxVariedades2.DataSource = data1.ToList();
                comboBoxVariedades2.DisplayMember = "Titulo";
                comboBoxVariedades2.ValueMember = "IdVariedad";
                comboBoxVariedades2.SelectedItem = null;

                // Se inicializa el ComboBox2
                var data2 = phi.Ensayo;
                comboBoxEnsayo2.DataSource = data2.ToList();
                comboBoxEnsayo2.DisplayMember = "Ensayo1";
                comboBoxEnsayo2.ValueMember = "IdEnsayo";
                comboBoxEnsayo2.SelectedItem = null;

                //Se inicializa el ComboBoxVariedad
                var data3 = phi.Variedades;
                comboBoxVariedad.DataSource = data3.ToList();
                comboBoxVariedad.DisplayMember = "Titulo";
                comboBoxVariedad.ValueMember = "IdVariedad";
                comboBoxVariedad.SelectedItem = null;

                //Se inicializa el ComboBoxEnsayo
                var data4 = phi.Ensayo;
                comboBoxEnsayo.DataSource = data4.ToList();
                comboBoxEnsayo.DisplayMember = "Ensayo1";
                comboBoxEnsayo.ValueMember = "IdEnsayo";
                comboBoxEnsayo.SelectedItem = null;

                //Se inicializa el ComboBoxRepeticion
                var data5 = phi.Repeticiones;
                comboBoxRepeticion.DataSource = data5.ToList();
                comboBoxRepeticion.DisplayMember = "IdRepeticion";
                comboBoxRepeticion.ValueMember = "IdRepeticion";
                comboBoxRepeticion.SelectedItem = null;

                comboBoxRepeticion2.DataSource = data5.ToList();
                comboBoxRepeticion2.DisplayMember = "IdRepeticion";
                comboBoxRepeticion2.ValueMember = "IdRepeticion";
                comboBoxRepeticion2.SelectedItem = null;

                dataGridVariedades.DataSource = data3.ToList();
                dataGridVariedades.Columns["IdVariedad"].Visible = false;
                dataGridVariedades.Columns["Mediciones"].Visible = false;
                dataGridVariedades.Columns["Parcelas"].Visible = false;
                dataGridVariedades.AllowUserToAddRows = true;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Exiten problemas en la conexión a la Base de Datos. Favor cierre e intente nuevamente.");
                
            }
        }

        /// <summary>
        /// Metodo que permite al usuario buscar un archivo con mediciones para cargar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonBuscarPlantillaMediciones_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog DialogoBuscarArchivo = new OpenFileDialog();
            DialogoBuscarArchivo.InitialDirectory = "c:\\";
            DialogoBuscarArchivo.Filter = "Excel files (*.xls)|*.xls|All files (*.*)|*.*";
            if (DialogoBuscarArchivo.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = DialogoBuscarArchivo.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            excel.MyStream = myStream;
                            string mensaje = excel.ProcesarMediciones();
                            MessageBox.Show(mensaje);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: No fue posible leer el archivo. Error: " + ex.Message);
                }
            }
        }

        private void dataGridVariedades_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex != 0 || e.RowIndex < 0) return;

            string titulo = "Autorización Eliminar Variedades";
            string mensaje = "¿Está seguro de que desea eliminar una variedad? "
                             + "\r\n"
                             + "Recuerde que al eliminar una variedad, se eliminarán consigo las parcelas y mediciones correspondientes";
            if (MessageBox.Show(mensaje, titulo, MessageBoxButtons.OKCancel) == DialogResult.OK)
            {

                int n = Int32.Parse(dataGridVariedades.Rows[e.RowIndex].Cells["IdVariedad"].Value.ToString());
                consultas.DeleteVariedad(n);
                ligarADatos();


            }
        }

        /// <summary>
        /// Método para que carga los mails válidos que actualizan la base de datos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonRevisarPendientes_Click(object sender, EventArgs e)
        {

            bool conectado = movil.ConectarAServidor();
            if (conectado)
            {
                
                int cantidad = movil.CantidadPendientes();
                labelMensajeMovilPendiente.Text = "* Existen " + cantidad.ToString() + " solicitudes pendientes.";
                labelMensajeMovilPendiente.Visible = true;
                if (cantidad != 0)
                {
                    buttonCargarMediciones.Visible = true;
                }
                
            }
            else
            {
                buttonCargarMediciones.Visible = false;
                MessageBox.Show("No fue posible realizar la conexión");
                labelMensajeMovilPendiente.Visible = false;
            }
                         
        }

        /// <summary>
        /// Método que carga los mails de la bandaja de entrada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonCargarMediciones_Click(object sender, EventArgs e)
        {
            MessageBox.Show(movil.CargarMedicionesMoviles());
            labelMensajeMovilPendiente.Visible = false;
            buttonCargarMediciones.Visible = false;
        }

        private void tab_IndexChanged(object sender, EventArgs e)
        {
            if (((TabControl)tabControl1).SelectedIndex == 6)
            {


                List<Mediciones> med = consultas.ExecuteQueryData(null, "1", null);
                int cantidadMedSecano = med.Count;
                float[] biomasaS = new float[cantidadMedSecano];
                float[] rendimientoS = new float[cantidadMedSecano];
                float[] ICS = new float[cantidadMedSecano];
                float[] P1000S = new float[cantidadMedSecano];
                float[] GRM2S = new float[cantidadMedSecano];
                float[] ESPM2S = new float[cantidadMedSecano];
                float[] GRESPS = new float[cantidadMedSecano];
                float[] DAS = new float[cantidadMedSecano];
                float[] DMS = new float[cantidadMedSecano];
                float[] TPGS = new float[cantidadMedSecano];
                float[] TPBS = new float[cantidadMedSecano];

                for (int i = 0; i < cantidadMedSecano; i++)
                {
                    float[] calculos = CalculosLaboratorio.Calculos(med[i]);

                    biomasaS[i] = calculos[0];
                    rendimientoS[i] = calculos[1];
                    ICS[i] = calculos[2];
                    P1000S[i] = calculos[3];
                    GRM2S[i] = calculos[4];
                    ESPM2S[i] = calculos[5];
                    GRESPS[i] = calculos[6];
                    DAS[i] = calculos[7];
                    DMS[i] = calculos[8];
                    TPGS[i] = calculos[9];
                    TPBS[i] = calculos[10];
                }
                float bm = Estadisticas.Media(biomasaS);
                float rend = Estadisticas.Media(rendimientoS);
                float ics = Estadisticas.Media(ICS);
                float p1000 = Estadisticas.Media(P1000S);
                float gr = Estadisticas.Media(GRM2S);
                float esp = Estadisticas.Media(ESPM2S);
                float gresp = Estadisticas.Media(GRESPS);
                float da = Estadisticas.Media(DAS);
                float dm = Estadisticas.Media(DMS);
                float tpg = Estadisticas.Media(TPGS);
                float tpb = Estadisticas.Media(TPBS);

                #region estadisticas secano
                labelMediaBiomasa.Text = bm.ToString();
                labelMediaRend.Text = rend.ToString();
                labelMediaIC.Text = ics.ToString();
                labelMediaP1000.Text = p1000.ToString();
                labelMediaGRM2.Text = gr.ToString();
                labelMediaESPM2.Text = esp.ToString();
                labelMediaGRESP.Text = gresp.ToString();
                labelMediaDA.Text = da.ToString();
                labelMediaDM.Text = dm.ToString();
                labelMediaTPG.Text = tpg.ToString();
                labelMediaTPB.Text = tpb.ToString();

                labelDEBiomasa.Text = Estadisticas.DE(biomasaS, bm).ToString();
                labelDERend.Text = Estadisticas.DE(rendimientoS, rend).ToString();
                labelDEIC.Text = Estadisticas.DE(ICS, ics).ToString();
                labelDEP1000.Text = Estadisticas.DE(P1000S, p1000).ToString();
                labelDEGRM2.Text = Estadisticas.DE(GRM2S, gr).ToString();
                labelDEESPM2.Text = Estadisticas.DE(ESPM2S, esp).ToString();
                labelDEGRESP.Text = Estadisticas.DE(GRESPS, gresp).ToString();
                labelDEDA.Text = Estadisticas.DE(DAS, da).ToString();
                labelDEDM.Text = Estadisticas.DE(DMS, dm).ToString();
                labelDETPG.Text = Estadisticas.DE(TPGS, tpg).ToString();
                labelDETPB.Text = Estadisticas.DE(TPBS, tpb).ToString();

                labelEEBiomasa.Text = Estadisticas.EE(biomasaS, bm).ToString();
                labelEERend.Text = Estadisticas.EE(rendimientoS, rend).ToString();
                labelEEIC.Text = Estadisticas.EE(ICS, ics).ToString();
                labelEEP1000.Text = Estadisticas.EE(P1000S, p1000).ToString();
                labelEEGRM2.Text = Estadisticas.EE(GRM2S, gr).ToString();
                labelEEESPM2.Text = Estadisticas.EE(ESPM2S, esp).ToString();
                labelEEGRESP.Text = Estadisticas.EE(GRESPS, gresp).ToString();
                labelEEDA.Text = Estadisticas.EE(DAS, da).ToString();
                labelEEDM.Text = Estadisticas.EE(DMS, dm).ToString();
                labelEETPG.Text = Estadisticas.EE(TPGS, tpg).ToString();
                labelEETPB.Text = Estadisticas.EE(TPBS, tpb).ToString();

                labelMinBiomasa.Text = Estadisticas.Min(biomasaS).ToString();
                labelMinRend.Text = Estadisticas.Min(rendimientoS).ToString();
                labelMinIC.Text = Estadisticas.Min(ICS).ToString();
                labelMinP1000.Text = Estadisticas.Min(P1000S).ToString();
                labelMinGRM2.Text = Estadisticas.Min(GRM2S).ToString();
                labelMinESPM2.Text = Estadisticas.Min(ESPM2S).ToString();
                labelMinGRESP.Text = Estadisticas.Min(GRESPS).ToString();
                labelMinDA.Text = Estadisticas.Min(DAS).ToString();
                labelMinDM.Text = Estadisticas.Min(DMS).ToString();
                labelMinTPG.Text = Estadisticas.Min(TPGS).ToString();
                labelMinTPB.Text = Estadisticas.Min(TPBS).ToString();

                labelMaxBiomasa.Text = Estadisticas.Max(biomasaS).ToString();
                labelMaxRend.Text = Estadisticas.Max(rendimientoS).ToString();
                labelMaxIC.Text = Estadisticas.Max(ICS).ToString();
                labelMaxP1000.Text = Estadisticas.Max(P1000S).ToString();
                labelMaxGRM2.Text = Estadisticas.Max(GRM2S).ToString();
                labelMaxESPM2.Text = Estadisticas.Max(ESPM2S).ToString();
                labelMaxGRESP.Text = Estadisticas.Max(GRESPS).ToString();
                labelMaxDA.Text = Estadisticas.Max(DAS).ToString();
                labelMaxDM.Text = Estadisticas.Max(DMS).ToString();
                labelMaxTPG.Text = Estadisticas.Max(TPGS).ToString();
                labelMaxTPB.Text = Estadisticas.Max(TPBS).ToString();
                #endregion

                List<Mediciones> medR = consultas.ExecuteQueryData(null, "2", null);
                int cantidadMedRiego = medR.Count;
                float[] biomasaR = new float[cantidadMedRiego];
                float[] rendimientoR = new float[cantidadMedRiego];
                float[] ICR = new float[cantidadMedRiego];
                float[] P1000R = new float[cantidadMedRiego];
                float[] GRM2R = new float[cantidadMedRiego];
                float[] ESPM2R = new float[cantidadMedRiego];
                float[] GRESPR = new float[cantidadMedRiego];
                float[] DAR = new float[cantidadMedRiego];
                float[] DMR = new float[cantidadMedRiego];
                float[] TPGR = new float[cantidadMedRiego];
                float[] TPBR = new float[cantidadMedRiego];

                for (int i = 0; i < cantidadMedRiego; i++)
                {
                    float[] calculosR = CalculosLaboratorio.Calculos(medR[i]);

                    biomasaR[i] = calculosR[0];
                    rendimientoR[i] = calculosR[1];
                    ICR[i] = calculosR[2];
                    P1000R[i] = calculosR[3];
                    GRM2R[i] = calculosR[4];
                    ESPM2R[i] = calculosR[5];
                    GRESPR[i] = calculosR[6];
                    DAR[i] = calculosR[7];
                    DMR[i] = calculosR[8];
                    TPGR[i] = calculosR[9];
                    TPBR[i] = calculosR[10];


                }
                float bmR = Estadisticas.Media(biomasaR);
                float rendR = Estadisticas.Media(rendimientoR);
                float icsR = Estadisticas.Media(ICR);
                float p1000R = Estadisticas.Media(P1000R);
                float grR = Estadisticas.Media(GRM2R);
                float espR = Estadisticas.Media(ESPM2R);
                float grespR = Estadisticas.Media(GRESPR);
                float daR = Estadisticas.Media(DAR);
                float dmR = Estadisticas.Media(DMR);
                float tpgR = Estadisticas.Media(TPGR);
                float tpbR = Estadisticas.Media(TPBR);

                #region mostrar estadisticas riego
                labelMediaBiomasaR.Text = bmR.ToString();
                labelMediaRendR.Text = rendR.ToString();
                labelMediaICR.Text = icsR.ToString();
                labelMediaP1000R.Text = p1000R.ToString();
                labelMediaGRM2R.Text = grR.ToString();
                labelMediaESPM2R.Text = espR.ToString();
                labelMediaGRESPR.Text = grespR.ToString();
                labelMediaDAR.Text = daR.ToString();
                labelMediaDMR.Text = dmR.ToString();
                labelMediaTPGR.Text = tpgR.ToString();
                labelMediaTPBR.Text = tpbR.ToString();

                labelDEBiomasaR.Text = Estadisticas.DE(biomasaR, bmR).ToString();
                labelDERENDR.Text = Estadisticas.DE(rendimientoR, rendR).ToString();
                labelDEICR.Text = Estadisticas.DE(ICR, icsR).ToString();
                labelDEP1000R.Text = Estadisticas.DE(P1000R, p1000R).ToString();
                labelDEGRM2R.Text = Estadisticas.DE(GRM2R, grR).ToString();
                labelDEESPM2R.Text = Estadisticas.DE(ESPM2R, espR).ToString();
                labelDEGRESPR.Text = Estadisticas.DE(GRESPR, grespR).ToString();
                labelDEDAR.Text = Estadisticas.DE(DAR, daR).ToString();
                labelDEDMR.Text = Estadisticas.DE(DMR, dmR).ToString();
                labelDETPGR.Text = Estadisticas.DE(TPGR, tpgR).ToString();
                labelDETPBR.Text = Estadisticas.DE(TPBR, tpbR).ToString();

                labelEEBiomasaR.Text = Estadisticas.EE(biomasaR, bmR).ToString();
                labelEERENDR.Text = Estadisticas.EE(rendimientoR, rendR).ToString();
                labelEEICR.Text = Estadisticas.EE(ICR, icsR).ToString();
                labelEEP1000R.Text = Estadisticas.EE(P1000R, p1000R).ToString();
                labelEEGRM2R.Text = Estadisticas.EE(GRM2R, grR).ToString();
                labelEEESPM2R.Text = Estadisticas.EE(ESPM2R, espR).ToString();
                labelEEGRESPR.Text = Estadisticas.EE(GRESPR, grespR).ToString();
                labelEEDAR.Text = Estadisticas.EE(DAR, daR).ToString();
                labelEEDMR.Text = Estadisticas.EE(DMR, dmR).ToString();
                labelEETPGR.Text = Estadisticas.EE(TPGR, tpgR).ToString();
                labelEETPBR.Text = Estadisticas.EE(TPBR, tpbR).ToString();

                labelMinBiomasaR.Text = Estadisticas.Min(biomasaR).ToString();
                labelMinRENDR.Text = Estadisticas.Min(rendimientoR).ToString();
                labelMinICR.Text = Estadisticas.Min(ICR).ToString();
                labelMinP1000R.Text = Estadisticas.Min(P1000R).ToString();
                labelMinGRM2R.Text = Estadisticas.Min(GRM2R).ToString();
                labelMinESPM2R.Text = Estadisticas.Min(ESPM2R).ToString();
                labelMinGRESPR.Text = Estadisticas.Min(GRESPR).ToString();
                labelMinDAR.Text = Estadisticas.Min(DAR).ToString();
                labelMinDMR.Text = Estadisticas.Min(DMR).ToString();
                labelMinTPGR.Text = Estadisticas.Min(TPGR).ToString();
                labelMinTPBR.Text = Estadisticas.Min(TPBR).ToString();

                labelMaxBiomasaR.Text = Estadisticas.Max(biomasaR).ToString();
                labelMaxRENDR.Text = Estadisticas.Max(rendimientoR).ToString();
                labelMaxICR.Text = Estadisticas.Max(ICR).ToString();
                labelMaxP1000R.Text = Estadisticas.Max(P1000R).ToString();
                labelMaxGRM2R.Text = Estadisticas.Max(GRM2R).ToString();
                labelMaxESPM2R.Text = Estadisticas.Max(ESPM2R).ToString();
                labelMaxGRESPR.Text = Estadisticas.Max(GRESPR).ToString();
                labelMaxDAR.Text = Estadisticas.Max(DAR).ToString();
                labelMaxDMR.Text = Estadisticas.Max(DMR).ToString();
                labelMaxTPGR.Text = Estadisticas.Max(TPGR).ToString();
                labelMaxTPBR.Text = Estadisticas.Max(TPBR).ToString();
                #endregion

                tableLayoutPanelSecano.Visible = true;
                tableLayoutPanel1.Visible = true;
            }
            else
            {
                tableLayoutPanelSecano.Visible = false;
                tableLayoutPanel1.Visible = false;
            }
        }


        #region CODIGO OBSOLETO
        /// <summary>
        /// Método que resetea los campos ingresados en mediciones
        /// Esto se hace, porque si el usuario desea agregar una medición, pero por casualidad ingreso todo los combobox
        /// no este obligado a actualizar una medición para así porder ingresar una.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonReset_Click(object sender, EventArgs e)
        {
            comboBoxVariedades2.SelectedItem = null;
            comboBoxEnsayo2.SelectedItem = null;
            comboBoxRepeticion2.SelectedItem = null;
            Limpiar();
            EsUpdate = false;
        }
        #endregion



        

        

        
    }
}


